package com.mallcai.bigdata.ladon.controller.report.form;

import com.mallcai.bigdata.ladon.controller.BaseForm;
import com.mallcai.bigdata.ladon.dpl.entity.report.QueryField;
import com.mallcai.bigdata.ladon.dpl.entity.report.Report;
import com.mallcai.bigdata.ladon.dpl.entity.report.ReportColumn;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.beans.BeanUtils;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.List;

/**
 * Created by oneape<oneape15@163.com>
 * Created 2019-07-13 17:20.
 * Modify:
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class ReportForm extends BaseForm {
    @NotNull(message = "报表ID不能为空", groups = {IdCheck.class})
    private Long          reportId;
    private String        code;  // 报表编码全局唯一
    @NotBlank(message = "报表名称为空", groups = {AddCheck.class, EditCheck.class})
    private String        name;  // 报表名称
    private List<Integer> type;  // 报表类型, 1 - 表格; 2 - 图表; 3 - xxx等
    private String        xAxis; // 图表显示时, x轴列名; 多个以";"隔开
    private String        yAxis; // 图表显示时,y轴列名; 多个以";"隔开
    private String        icon;  // 报表图标
    private Long          detailSqlId; // 报表详情查询Id
    private Long          countSqlId;  // 报表合计查询Id
    private Integer       queryFieldLabelLen; // 查询字段标签显示长度
    private Integer       queryFieldMediaLen; // 查询字段控件显示长度
    private Integer       simpleReport;       // 是否为简单报表,给LOV等作为查询条件使用
    private Long          sortId;   // 排序Id
    private String        comment;  // 描述信息
    private Integer       statical; // 静态的报表 0 - 否; 1 - 是;
    private Integer       flowSwitch; // 流量开关
    private Long          owner; // 负责人

    private Integer autoCreatedCode; // 自动生成code

    private List<Long> groupIds; // 支持一个报表属于多个报表组
    private List<Long> filterIds; // 过滤的Id列表
    private String     fixOption;  // 携带特定项

    private List<QueryField>   queryFields;   // 查询参数列表
    private List<ReportColumn> reportColumns; // 报表字段信息列表

    public interface IdCheck {
    }

    public interface AddCheck {
    }

    public interface EditCheck {
    }

    public Report toEntity() {
        Report r = new Report();
        BeanUtils.copyProperties(this, r);
        r.setId(reportId);
        return r;
    }
}
